import * as React from "react"; import { Skeleton } from "@/components/ui/skeleton"; import { Shell } from "@/components/shell"; import { ErrorBoundary } from "@/components/error-boundary"; import { getDashboardData } from "@/lib/dashboard/service"; import { DashboardClient } from "@/lib/dashboard/dashboard-client"; // 데이터 fetch 시 비동기 함수 호출 후 await 하므로 static-pre-render 과정에서 dynamic-server-error 발생. // 따라서, dynamic 속성을 force-dynamic 으로 설정하여 동적 렌더링 처리 // getDashboardData 함수에 대한 Promise를 넘기는 식으로 수정하게 되면 force-dynamic 선언을 제거해도 됨. export const dynamic = 'force-dynamic' export default async function IndexPage() { // domain을 명시적으로 전달 const domain = "engineering"; try { // 서버에서 직접 데이터 fetch const dashboardData = await getDashboardData(domain); return ( ); } catch (error) { console.error("Dashboard data fetch error:", error); return (

데이터를 불러오는데 실패했습니다.

{error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다."}

); } } function DashboardSkeleton() { return (
{/* 헤더 스켈레톤 */}
{/* 요약 카드 스켈레톤 */}
{[...Array(4)].map((_, i) => (
))}
{/* 차트 스켈레톤 */}
{[...Array(2)].map((_, i) => (
))}
{/* 탭 스켈레톤 */}
{[...Array(6)].map((_, i) => (
))}
); }